﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaidou.Model;
using Kaidou.Persister;
using Kaidou.Util;
using System.Globalization;
using System.Collections;

namespace Kaidou.Bll
{
    public class TRN_ReportManager
    {
        /**
	     *<pre>
	     *確認シール貼付報告のDBへインサートをおこなう。
	     *報告確認メールを送信する。
	     *インサートするテーブル名
	     *	TRN_Report_H
	     *	TRN_Report_D
	     *	TRN_Report_Seal
	     *</pre>
	     *
	     * @param checkInsertReport()を呼んで Reportモデルを取得
	     * @throws FrameworkException
	     */
        public void insertReport(Report rpt, LoginModel login, System.Resources.ResourceManager rm, string RootPath)
        {
            string report_no = null;
		    
            //重複エラーフラグ
		    if (TrnReporth.ERROR_ON.Equals(rpt.getReportH().DupErrorFlg)) {
			    rpt.getReportH().DupErrorFlg = TrnReporth.ERROR_ON;
		    } else {
			    rpt.getReportH().DupErrorFlg = TrnReporth.ERROR_OFF;
		    }
		    //報告者不一致エラーフラグ
		    if (TrnReporth.ERROR_ON.Equals(rpt.getReportH().DifReportFlg)) {
			    rpt.getReportH().DifReportFlg = TrnReporth.ERROR_ON;
		    } else {
			    rpt.getReportH().DifReportFlg = TrnReporth.ERROR_OFF;
		    }
            SqlDB db=null;
            try
            {

                //create Persister
                TRN_Report_H_Persister per_H = new TRN_Report_H_Persister();
                TRN_Report_D_Persister per_D = new TRN_Report_D_Persister();
                TRN_Report_Seal_Persister per_S = new TRN_Report_Seal_Persister();
                TRN_Purch_SealPersister per_P = new TRN_Purch_SealPersister();

                //report_noを取得
                report_no = per_H.makeReportNo();
                LogManager.info(" TRN_ReportManager insertReport report_no is" + report_no);

                db = new SqlDB();
                db.TransBegin();

                /** TRN_Report_Hをインサートする */
                //report_noをセット
                rpt.getReportH().ReportNo = report_no;
                //Timestampをセット
                DateTime currentDate = System.DateTime.Now;
                rpt.getReportH().ReportDate = currentDate;
                rpt.getReportH().RegDate = currentDate;
                rpt.getReportH().UpdDate = currentDate;

                CultureInfo culture = new CultureInfo("ja-JP");
                int year = int.Parse(rpt.getReportH().EstYear) + 2000;
                int month = int.Parse(rpt.getReportH().EstMonth);
                int day = int.Parse(rpt.getReportH().EstDay);
                DateTime calapplicationDate = Convert.ToDateTime(year + "/" + month + "/" + day, culture);
                rpt.getReportH().EstDate = calapplicationDate;

                //報告者
                rpt.getReportH().UnionCode = login.Unioncode;
                rpt.getReportH().BranchCode = (short)login.Branchcode;
                //更新者
                rpt.getReportH().UpdUnionCode = login.Unioncode;
                rpt.getReportH().UpdBranchCode = (short)login.Branchcode;
                //更新 Function
                rpt.getReportH().UpdFuncId = "insertReport()";
                //ステータスをセット
                if (login.isTagyousha())
                {
                    rpt.getReportH().ReportSts = TrnReporth.STATUS_UNCHECK;
                }
                else
                {
                    rpt.getReportH().ReportSts = TrnReporth.STATUS_CHECKED;
                }
                //報告区分をセット
                rpt.getReportH().ReportClss = TrnReporth.CLSS_INTERNET;
                per_H.insert(db, rpt.getReportH());
                per_H.insertHall(db, rpt.getReportH());
                /** TRN_Report_Dをインサートする */
                for (int i = 0; i < 5; i++)
                {
                    try
                    {
                        if (rpt.getReportD()[i] == null)
                            continue;
                    }
                    catch (Exception e)
                    {
                        break;
                    }
                    rpt.getReportD()[i].Id.ReportNo = report_no;
                    rpt.getReportD()[i].RegDate = currentDate;
                    rpt.getReportD()[i].UpdDate = currentDate;
                    rpt.getReportD()[i].UpdUnionCode = login.Unioncode;
                    rpt.getReportD()[i].UpdBranchCode = (short)login.Branchcode;
                    rpt.getReportD()[i].UpdFuncId = "insertReport()";
                    per_D.insert(db, rpt.getReportD()[i]);
                    if (!login.isTagyousha())
                    {
                        //未承認の物は作成しない
                        // trn_report_seal
                        per_S.insertByProcedure(db, rpt.getReportD()[i]);
                        per_P.updatetReportSealSts(db, rpt.getReportD()[i].SealStrNo, rpt.getReportD()[i].SealEndNo, TrnPurchSeal_a.STATUS_CHECKED);
                    }
                }


                //注文メール送信
                string reportBody = TemplateManager.getReport(rpt, login, rm);
                Mail mail = new Mail();
                if (StringUtil.isEmpty(login.OfficeEmail))
                {
                    //メールアドレスが無いので、プロパティ参照
                    LogManager.info("TRN_ReportManager  mail setTo:" + rm.GetString("kaidou_mailsend_default_to"));
                    mail.setTo(rm.GetString("kaidou_mailsend_default_to"));
                }
                else
                {
                    //メール送信
                    LogManager.info("TRN_ReportManager ---------- mail setTo:" + login.OfficeEmail);
                    mail.setTo(login.OfficeEmail);
                }
                LogManager.info("TRN_JuchuManager  ---------- mail to end");
                string bcc = rm.GetString("kaidou_mailsend_bcc");
                if (bcc != null && !StringUtil.isEmpty(bcc))
                {
                    mail.setBcc(bcc);
                }

                mail.setSubject("[回胴遊商]ご報告受け付けました。");
                mail.setMessage(reportBody);

                MailSendManager.sendMail(mail, RootPath);

                db.TransCommit();

               
            }
            catch (Exception pe)
            {
                db.TransRollback();
                LogManager.error("TRN_ReportManager insertReport fail" + pe.Message + pe.StackTrace);
                throw new Exception("TRN_ReportManager insertReport fail" + pe.Message + pe.StackTrace);

            }
            finally
            {
                db.Close();
            }

            

        }


        /**
	     *<pre>
	     *確認シール貼付報告のDBへインサートをおこなう。
	     *報告確認メールを送信する。
	     *インサートするテーブル名
	     *	TRN_Report_H
	     *	TRN_Report_D
	     *	TRN_Report_Seal
	     *</pre>
	     *
	     * @param checkInsertReport()を呼んで Reportモデルを取得
	     * @throws FrameworkException
	     */
        public void insertReportRepresen(Report rpt, LoginModel login)
        {
            string report_no = null;

            //重複エラーフラグ
            if (TrnReporth.ERROR_ON.Equals(rpt.getReportH().DupErrorFlg))
            {
                rpt.getReportH().DupErrorFlg = TrnReporth.ERROR_ON;
            }
            else
            {
                rpt.getReportH().DupErrorFlg = TrnReporth.ERROR_OFF;
            }
            //報告者不一致エラーフラグ
            if (TrnReporth.ERROR_ON.Equals(rpt.getReportH().DifReportFlg))
            {
                rpt.getReportH().DifReportFlg = TrnReporth.ERROR_ON;
            }
            else
            {
                rpt.getReportH().DifReportFlg = TrnReporth.ERROR_OFF;
            }
            SqlDB db = null;
            try
            {

                //create Persister
                TRN_Report_H_Persister per_H = new TRN_Report_H_Persister();
                TRN_Report_D_Persister per_D = new TRN_Report_D_Persister();
                TRN_Report_Seal_Persister per_S = new TRN_Report_Seal_Persister();
                TRN_Purch_SealPersister per_P = new TRN_Purch_SealPersister();

                //report_noを取得
                report_no = per_H.makeReportNo();
                LogManager.info(" TRN_ReportManager insertReport report_no is" + report_no);

                db = new SqlDB();
                db.TransBegin();

                /** TRN_Report_Hをインサートする */
                //report_noをセット
                rpt.getReportH().ReportNo = report_no;
                //Timestampをセット
                DateTime currentDate = System.DateTime.Now;
                //rpt.getReportH().ReportDate = currentDate;
                rpt.getReportH().RegDate = currentDate;
                rpt.getReportH().UpdDate = currentDate;

                //更新者
                rpt.getReportH().UpdUnionCode = login.Unioncode;
                rpt.getReportH().UpdBranchCode = (short)login.Branchcode;
                //更新 Function
                rpt.getReportH().UpdFuncId = "insertReport()";
                //更新 Function

                if (TrnReporth.CLSS_INTERNET.Equals(rpt.getReportH().ReportClss))
                {
                    rpt.getReportH().UpdFuncId = "insertReport()";
                }
                else if (TrnReporth.CLSS_FAX.Equals(rpt.getReportH().ReportClss))
                {
                    rpt.getReportH().UpdFuncId = "prosessFaxocrData";
                }
                //ステータスをセット
                if (rpt.getReportH().BranchCode >= 900)
                {
                    rpt.getReportH().ReportSts = TrnReporth.STATUS_UNCHECK;
                }
                else
                {
                    rpt.getReportH().ReportSts = TrnReporth.STATUS_CHECKED;
                }

                per_H.insert(db, rpt.getReportH());
                per_H.insertHall(db, rpt.getReportH());
                /** TRN_Report_Dをインサートする */
                for (int i = 0; i < 5; i++)
                {
                    try
                    {
                        if (rpt.getReportD()[i] == null)
                            continue;
                    }
                    catch (Exception e)
                    {
                        break;
                    }
                    rpt.getReportD()[i].Id.ReportNo = report_no;
                    rpt.getReportD()[i].RegDate = currentDate;
                    rpt.getReportD()[i].UpdDate = currentDate;
                    rpt.getReportD()[i].UpdUnionCode = login.Unioncode;
                    rpt.getReportD()[i].UpdBranchCode = (short)login.Branchcode;
                    if (TrnReporth.CLSS_INTERNET.Equals(rpt.getReportH().ReportClss))
                    {
                        rpt.getReportD()[i].UpdFuncId = "insertReport()";
                    }
                    else if (TrnReporth.CLSS_FAX.Equals(rpt.getReportH().ReportClss))
                    {
                        rpt.getReportD()[i].UpdFuncId = "prosessFaxocrData";
                    }
                    per_D.insert(db, rpt.getReportD()[i]);
                    if (rpt.getReportH().BranchCode < 900)
                    {
                        //未承認の物は作成しない
                        // trn_report_seal
                        per_S.insertByProcedure(db, rpt.getReportD()[i]);
                        per_P.updatetReportSealSts(db, rpt.getReportD()[i].SealStrNo, rpt.getReportD()[i].SealEndNo, TrnPurchSeal_a.STATUS_CHECKED);
                    }
                }

                db.TransCommit();
            }
            catch (Exception pe)
            {
                db.TransRollback();
                LogManager.error("TRN_ReportManager insertReport " + pe.Message + pe.StackTrace);

            }
            finally
            {
                db.Close();
            }

            //報告メール送信
        }

        /**
	     * 他業者(支店コード900番)が登録した貼付報告の承認を行う
	     *
	     * @param	report_no	報告番号
	     * @return	boolean
	     * @throws FrameworkException
	     */
	    public bool admissionReport(string report_no,LoginModel login)  {
            LogManager.info( "TRN_ReportManager admissionReport - in " );
            LogManager.info( "TRN_ReportManager admissionReport - report_no is : "+report_no );
		    bool ret = false;
            SqlDB db = new SqlDB();
		    TrnReporth model = null;
            try
            {
                TRN_Report_H_Persister per_H = new TRN_Report_H_Persister();
                TRN_Report_D_Persister per_D = new TRN_Report_D_Persister();
                TRN_Report_Seal_Persister per_S = new TRN_Report_Seal_Persister();
                model = per_H.getDetail(report_no);
                //Timestampをセット
                DateTime currentDate = System.DateTime.Now;
                LogManager.info("TRN_ReportManager admissionReport - currentDate is : " + currentDate.ToString());
                model.ReportNo = report_no;
                model.UpdDate = currentDate;
                model.UpdUnionCode = login.Unioncode;
                model.UpdBranchCode = (short)login.Branchcode;
                model.UpdFuncId = "admissionReport";
                db.TransBegin();
                ret = per_H.admission(db, model);
                //Report_Dを全て取得して、プロシージャに処理を渡す
                ArrayList rptd = per_D.get(report_no);
                for (int i = 0; i < rptd.Count; i++)
                {
                    TrnReportd reportd = (TrnReportd)rptd[i];
                    per_S.insertByProcedure(db, reportd);
                }
                db.TransCommit();

            }
            catch (Exception pe)
            {
                db.TransRollback();
                LogManager.error("trn_reportmanaager " + pe.Message + pe.StackTrace);
            }
            finally
            {
                db.Close();
            }
		    return ret;
	    }

        /**
	     * 他業者(支店コード900番)が登録した貼付報告の承認を行う
	     *
	     * @param	report_no	報告番号
	     * @return	boolean
	     * @throws FrameworkException
	     */
        public bool denialReport(string report_no, LoginModel login)
        {
            LogManager.info("TRN_ReportManager denialReport - in ");
            LogManager.info("TRN_ReportManager denialReport - report_no is : " + report_no);
            bool ret = false;

            TrnReporth model = null;
            SqlDB db = new SqlDB();
            try
            {
                TRN_Report_H_Persister per_H = new TRN_Report_H_Persister();
                TRN_Report_D_Persister per_D = new TRN_Report_D_Persister();
                TRN_Purch_SealPersister per_S = new TRN_Purch_SealPersister();
                model = per_H.getDetail(report_no);
                //Timestampをセット
                DateTime currentDate = System.DateTime.Now;
                LogManager.info("TRN_ReportManager admissionReport - currentDate is : " + currentDate.ToString());
                model.ReportNo = report_no;
                model.UpdDate = currentDate;
                model.UpdUnionCode = login.Unioncode;
                model.UpdBranchCode = (short)login.Branchcode;
                model.UpdFuncId = "denialReport";
                ret = per_H.denial(model);
                ArrayList reps = per_D.get(report_no);

                for (int i = 0; i < reps.Count; i++)
                {
                    TrnReportd d = (TrnReportd)reps[i];
                    per_S.updatetReportSealSts(db, d.SealStrNo, d.SealEndNo, TrnPurchSeal_a.STATUS_DENIAL);
                }


            }
            catch (Exception pe)
            {
                LogManager.error("trn_reportmanaager " + pe.Message + pe.StackTrace);
            }
            finally
            {
                db.Close();
            }
            return ret;
        }

        /**
	     * 他業者(支店コード900番)が登録した貼付報告の一括承認を行う
	     *
	     * @param union_code	組合員コード
	     * @param page_num    表示ページ
	     * @return	boolean
	     * @throws FrameworkException
	     */
	    public bool admissionAllReport(string union_code, int page_num , int pagesize ,LoginModel login)  {
		    LogManager.info( " TRN_ReportManager admissionAllReport - in " );
            bool ret = false;
            if (page_num == 0) page_num = 1;
		    TrnReporth model = null;
            SqlDB db= new SqlDB();
            try
            {
                TRN_Report_H_Persister per_H = new TRN_Report_H_Persister();
                TRN_Report_D_Persister per_D = new TRN_Report_D_Persister();
                TRN_Report_Seal_Persister per_S = new TRN_Report_Seal_Persister();
                TRN_Purch_SealPersister per_P = new TRN_Purch_SealPersister();
                //MST_HallPersister per_Hall = new MST_HallPersister();
                //Timestampをセット
                DateTime currentDate = System.DateTime.Now;
                DateTime date = System.DateTime.Now;

                //検索条件セット
                ReportSearchModel sm = new ReportSearchModel();
                sm.setUnion_code(login.Unioncode);
                sm.setReport_sts(TrnReporth.STATUS_UNCHECK);
                Pager pager = per_H.search(sm, page_num, pagesize);
                ArrayList serch = pager.List;
                db.TransBegin();
                for (int i = 0; i < serch.Count; i++)
                {

                    sm = (ReportSearchModel)serch[i];
                    //チェックがここで必要。
                    model = new TrnReporth();
                    //Report_Hを更新
                    model.ReportNo = sm.getReport_no();
                    model.UpdDate = currentDate;
                    model.UpdUnionCode = login.Unioncode;
                    model.UpdBranchCode = (short)login.Branchcode;
                    model.UpdFuncId = "admissionAllReport";
                    ret = per_H.admission(db, model);
                    LogManager.info(" TRN_ReportManager admissionAllReport - admission in ");
                    //Report_Dを全て取得して、プロシージャに処理を渡す
                    ArrayList rptd = per_D.get(sm.getReport_no());
                    for (int j = 0; j < rptd.Count; j++)
                    {
                        TrnReportd reportd = (TrnReportd)rptd[j];
                        per_S.insertByProcedure(db, reportd);
                        per_P.updatetReportSealSts(db, reportd.SealStrNo, reportd.SealEndNo, TrnPurchSeal_a.STATUS_CHECKED);
                    }
                    /*
                    //ホールアクセス日を更新
                    MST_Hall hall = new MST_Hall();
                    hall.setHall_seqno(sm.getHall_seqno());
                    hall.setAccess_date(date);
                    hall.setUpd_date(currentDate);
                    hall.setUpd_union_code(context.getLogin().getUnion_code());
                    hall.setUpd_branch_code(context.getLogin().getBranch_code());
                    hall.setUpd_func_id("admissionAllReport");
                    per_Hall.updateAccessDate(con, hall);
                     * */

                }
                db.TransCommit();

            }
            catch (Exception pe)
            {
                db.TransRollback();
                LogManager.error("trn_reportmanager " + pe.Message + pe.StackTrace);
            }
            finally
            {
                db.Close();
            }
		    return ret;
	    }

        /**
	     * 渡されたTRN_Report_D モデルのチェックを行う<br>
	     * インサート、アップデート共通に使用
	     *
	     * @param	reportmodel TRN_Report_D
	     * @return	TRN_Report_D 報告明細
	     */
	    public TrnReportd checkReportD(InputErrorException ie ,TrnReportd trn_report_d) {
		    TrnReportd model = trn_report_d;
		    ParameterCheckUtility.checkReportSealNo(ie, model.SealStrNo, model.SealEndNo);
		    //新台、中古台　必須
		    ParameterCheckUtility.checkMachineClss(ie, model.MachineClss);
		    return model;
	    }

        /**
	     * 渡されたモデルのチェックを行う
	     *
	     * @param	reportmodel TRN_Report_H
	     */
	    public List<string> checkInsertReportH(InputErrorException ie ,TrnReporth reportmodel,System.Resources.ResourceManager rm) {
		    TrnReporth model = reportmodel;
		   // InputErrorException ie = new InputErrorException(rm);
		    LogManager.info("TRN_ReportManager checkInsertReportH - in");
            try {
			    //コネクション取得
    		    //組合員コード存在チェック
			    ParameterCheckUtility.existBranch( ie, model.UnionCode, model.BranchCode);
			    //報告担当者　入力必須、全角のみ
			    ParameterCheckUtility.checkReportTantoName(ie, model.ReportTantoName);
			    //設置業者区分　必須 ( 委託販売会社名　当社設置の場合入力不可になる )
			    ParameterCheckUtility.checkEstCompClss(ie, model.EstCompClss, model.ConsCompName, model.ConsCompTelno);
                if ("1".Equals(model.EstCompClss))
                {
                   // ParameterCheckUtility.checkTelNo2(ie, model.ConsCompTelno);
                }
			    /**設置ホールチェックロジック**/
			    //設置場所・ホール名　入力必須、長さチェック
			    ParameterCheckUtility.checkHallName(ie, model.HallName);
			    //設置場所・所在地　都道府県　選択チェック
			    ParameterCheckUtility.checkPrefCode(ie, model.HallPrefCode);
			    //設置場所・所在地　市区町村　必須入力、長さチェック
			    ParameterCheckUtility.checkHallCity2(ie, model.HallCity);
			    //設置場所・所在地　番地以降　必須入力、長さチェック
			    //ParameterCheckUtility.checkHallAddress(ie, model.HallAddress);
			    //設置場所・ホール電話番号　必須入力、半角数字のみ、長さチェック
			    ParameterCheckUtility.checkTelNo(ie, model.HallTel);
			    //設置遊技機型式名　入力必須
			    ParameterCheckUtility.checkMachineName(ie, model.MachineName);
			    //設置台数　入力必須、半角のみ、マイナス入力はエラー、
			    ParameterCheckUtility.checkMachineQty(ie, model.MachineQty);
			    //設置日　必須、半角のみ、日付形式
			    ParameterCheckUtility.checkEstDate(ie, model.EstYear, model.EstMonth, model.EstDay);
			    //販売業者登録証番号　必須、半角のみ 設置業者Mに存在しなければエラー
			    ParameterCheckUtility.checkTraderRegNo(ie, model.TraderRegNo1, model.TraderRegNo2);
			    //取扱主任者登録証番号　必須、半角のみ
			    ParameterCheckUtility.checkChiefNo(ie, model.ChiefNo1, model.ChiefNo2);
			    //Trader_reg_no重複チェック
			    ParameterCheckUtility.existTrader( ie, model.TraderRegNo, model.TraderRegNo1, model.TraderRegNo2);
			    //取扱主任者名　必須、スペースなし
			    ParameterCheckUtility.checkChiefName(ie, model.ChiefName);
			    //作業従事者名　スペースなし
			    ParameterCheckUtility.checkWorkerName(ie, model.Worker1Name);
			    ParameterCheckUtility.checkWorkerName(ie, model.Worker2Name);
			    ParameterCheckUtility.checkWorkerName(ie, model.Worker3Name);
			    ParameterCheckUtility.checkWorkerName(ie, model.Worker4Name);
			    ParameterCheckUtility.checkWorkerName(ie, model.Worker5Name);
			    ParameterCheckUtility.checkWorkerName(ie, model.Worker6Name);
		    } catch (Exception pe) {
			    LogManager.error("TRN_ReportManager checkInsertReportH "+pe.Message+pe.StackTrace);
			    
		    } 
            LogManager.info("TRN_ReportManager checkInsertReportH - out");
		    
            return ie.getErrorMessages();
	    }

        /**
	     * 渡されたモデルのチェックを行う
	     *
	     * @param	reportmodel TRN_Report_H
	     */
        public List<string> checkInsertReportH_Represen(InputErrorException ie, TrnReporth reportmodel, System.Resources.ResourceManager rm)
        {
            TrnReporth model = reportmodel;
            // InputErrorException ie = new InputErrorException(rm);
            LogManager.info("TRN_ReportManager checkInsertReportH_Represen - in");
            try
            {
                //コネクション取得
                //組合員コード存在チェック
                ParameterCheckUtility.existBranch(ie, model.UnionCode, model.BranchCode);
                //受信日のチェック
                ParameterCheckUtility.checkReceiveDate(ie, model.FaxRcvYear, model.FaxRcvMonth, model.FaxRcvDay);
                //報告日のチェック
                bool est_Error_Check_flg =ParameterCheckUtility.checkReportDate(ie, model.ReportYear, model.ReportMonth, model.ReportDay);
                //報告担当者　入力必須、全角のみ
                ParameterCheckUtility.checkReportTantoName(ie, model.ReportTantoName);
                //設置業者区分　必須 ( 委託販売会社名　当社設置の場合入力不可になる )
                ParameterCheckUtility.checkEstCompClss(ie, model.EstCompClss, model.ConsCompName, model.ConsCompTelno);
                /**設置ホールチェックロジック**/
                //設置場所・ホール名　入力必須、長さチェック
                ParameterCheckUtility.checkHallName(ie, model.HallName);
                //設置場所・所在地　都道府県　選択チェック
                ParameterCheckUtility.checkPrefCode(ie, model.HallPrefCode);
                //設置場所・所在地　市区町村　必須入力、長さチェック
               // ParameterCheckUtility.checkHallCity(ie, model.HallCity);
                ParameterCheckUtility.checkHallCity2(ie, model.HallCity);
                //設置場所・所在地　番地以降　必須入力、長さチェック
               // ParameterCheckUtility.checkHallAddress(ie, model.HallAddress);
                //設置場所・ホール電話番号　必須入力、半角数字のみ、長さチェック
                ParameterCheckUtility.checkTelNo(ie, model.HallTel);
                //設置遊技機型式名　入力必須
                ParameterCheckUtility.checkMachineName(ie, model.MachineName);
                //設置台数　入力必須、半角のみ、マイナス入力はエラー、
                ParameterCheckUtility.checkMachineQty(ie, model.MachineQty);
                if (est_Error_Check_flg)
                {
                    //設置日　必須、半角のみ、日付形式
                    ParameterCheckUtility.checkEstDate(ie, model.EstYear, model.EstMonth, model.EstDay);
                }
                //販売業者登録証番号　必須、半角のみ 設置業者Mに存在しなければエラー
                ParameterCheckUtility.checkTraderRegNo(ie, model.TraderRegNo1, model.TraderRegNo2);
                //取扱主任者登録証番号　必須、半角のみ
                ParameterCheckUtility.checkChiefNo(ie, model.ChiefNo1, model.ChiefNo2);
                //Trader_reg_no重複チェック
                ParameterCheckUtility.existTrader(ie, model.TraderRegNo, model.TraderRegNo1, model.TraderRegNo2);
                //取扱主任者名　必須、スペースなし
                ParameterCheckUtility.checkChiefName(ie, model.ChiefName);
                //作業従事者名　スペースなし
                ParameterCheckUtility.checkWorkerName(ie, model.Worker1Name);
                ParameterCheckUtility.checkWorkerName(ie, model.Worker2Name);
                ParameterCheckUtility.checkWorkerName(ie, model.Worker3Name);
                ParameterCheckUtility.checkWorkerName(ie, model.Worker4Name);
                ParameterCheckUtility.checkWorkerName(ie, model.Worker5Name);
                ParameterCheckUtility.checkWorkerName(ie, model.Worker6Name);
            }
            catch (Exception pe)
            {
                LogManager.error("TRN_ReportManager checkInsertReportH_Represen " + pe.Message + pe.StackTrace);

            }
            LogManager.info("TRN_ReportManager checkInsertReportH_Represen - out");

            return ie.getErrorMessages();
        }

        /**
	     * 渡されたモデルのチェックをする<br>
	     * インサート用
	     *
	     * @param model TRN_Report_D
	     * @return TRN_Report_D[]
	     * @throws FrameworkException
	     */
	    public List<string> checkInsertReportD(InputErrorException ie,TrnReportd[] model,System.Resources.ResourceManager rm,LoginModel login)  {
		    LogManager.info("TRN_ReportManager checkInsertReportD in ");
           // InputErrorException ie = new InputErrorException(rm);
		    TrnReportd report_d = null;
		    try {
    		    TRN_Purch_SealPersister per = new TRN_Purch_SealPersister();
			    //報告明細セット(TRN_Report_D)
			    int j = 0;
			    for (int i = 0; i < 5; i++) {
				    try {
					    report_d = model[i];
				    } catch (Exception e) {
					    break;
				    }
				    if (StringUtil.isEmpty(report_d.SealStrNo) && StringUtil.isEmpty(report_d.SealEndNo)) {
					    model[i] = null;
				    } else {
					    model[i] = checkReportD(ie,report_d);
					    j += 1;
					    int seal_str_no = 0;
					    int seal_end_no = 0;
					    try {
						    seal_str_no = int.Parse(model[i].SealStrNo);
					    } catch (Exception eeex) {
					    }
					    try {
						    seal_end_no = int.Parse(model[i].SealEndNo);
					    } catch (Exception exxx) {
						    seal_end_no = -1;
					    }
					    //シール購入管理明細を参照しシール番号が存在しなければエラー
					    if (!per.existSealNo(seal_str_no, seal_end_no)) {
						    ie.addErrorCode(ErrorCodeDefine.SEAL_NO_IS_NOT_REG);
					    }
					    //指定されたシールが破棄されていないかどうかチェック
					    if (per.countCanselSealNo( seal_str_no.ToString(), seal_end_no.ToString()) != 0) {
						    ie.addErrorCode(ErrorCodeDefine.SEAL_NO_IS_CANSEL);
					    }
                        
                        if (!login.Userclss.Equals("20")) {
                            //シールの有効期限をチェック
                            if (!ParameterCheckUtility.checkTerm_validity_sealNo(report_d.SealStrNo,report_d.SealEndNo,rm)) {
                                ie.addErrorCode(ErrorCodeDefine.SEAL_NO_IS_EXPIRATION);
                            }
                        }
				    }
			    }
			    //確認シール番号、 一行のみ入力必須
			    if (j == 0) {
				    ie.addErrorCode(ErrorCodeDefine.SEAL_NO_IS_NULL);
			    }
		    } catch (Exception pe) {
			    LogManager.error("TRN_ReportManager chechUpdateReportD "+pe.Message+pe.StackTrace);
            } 
		    
		    return ie.getErrorMessages();
	    }

        /**
	     *InputParametersから渡された値を報告モデルにセットし、挿入のためのチェックを行う
	    */
	    public List<string> checkInsertReport(Report rpt, System.Resources.ResourceManager rm,LoginModel login) {
		    InputErrorException ie = new InputErrorException(rm);
		    checkInsertReportH(ie,rpt.getReportH(),rm);
		    checkInsertReportD(ie,rpt.getReportD(),rm,login);
		    
		    //TRN_Report_HとTRN_Report_D[]をともにチェック
		    if (rpt.getSealCount() != rpt.getReportH().MachineQty) {
			    ie.addErrorCode(ErrorCodeDefine.SEAL_NO_IS_NOT_MATCH_MACHINE_QTY);
		    }
		    //確認シール番号の重複チェック
		    string[] seal_str_no = rpt.getSeal_str_no();
		    string[] seal_end_no = rpt.getSeal_end_no();
		    ParameterCheckUtility.checkSealNoDuplication(ie, seal_str_no, seal_end_no);
            List<string> error = ie.getErrorMessages();
           
		    return error;
	    }


        /**
	     * 報告済みのシール報告管理明細の数を取得
	     *
	     * @param rpt Report 報告モデル
	     * @return int 報告済みの件数のカウント
	     */
        public int countDuplicationReport(Report rpt)
        {
            int ret = 0;
		    try {
                TRN_Purch_SealPersister per = new TRN_Purch_SealPersister();
			    for (int i = 0; i < 5; i++) {
				    TrnReportd rd = rpt.getReportD()[i];
				    if (rd == null)
					    continue;
				    int seal_str_no = 0;
				    int seal_end_no = 0;
				    try {
					    seal_str_no = int.Parse(rd.SealStrNo);
				    } catch (Exception e) {
				    }
				    try {
					    seal_end_no = int.Parse(rd.SealEndNo);
				    } catch (Exception e) {
					    seal_end_no = -1;
				    }
				    ret += per.countDuplicationReport( seal_str_no, seal_end_no);
			    }
		    } catch (Exception pe) {
			    LogManager.error(" TRN_ReportManager countDuplicationRepor "+pe.Message);
                
		    } 
		    return ret;
        }

        /**
	     * シール購入者と報告者が異なる報告管理明細の数を取得
	     *
	     * @param rpt Report 報告モデル
	     * @return int 異なる報告管理明細の件数のカウント
	     */
        public int countDifferentUnion(Report rpt, string union_code)
        {
           int ret = 0;
		    try {
    	    TRN_Purch_SealPersister per = new TRN_Purch_SealPersister();
			    for (int i = 0; i < 5; i++) {
				    TrnReportd rd = rpt.getReportD()[i];
				    if (rd == null)
					    continue;
				    int seal_str_no = 0;
				    int seal_end_no = 0;
				    try {
					    seal_str_no = int.Parse(rd.SealStrNo);
				    } catch (Exception e) {
				    }
				    try {
					    seal_end_no = int.Parse(rd.SealEndNo);
				    } catch (Exception e) {
					    seal_end_no = -1;
				    }
				    ret += per.countDifferentUnion( seal_str_no, seal_end_no, union_code);
                    LogManager.info("TRN_ReportManager countDifferentUnion ret "+ret);
				   
			    }
		    } catch (Exception pe) {
                LogManager.error("TRN_ReportManager countDifferentUnion "+pe.Message);
			    
		    } 
		    return ret;
        }
    
        /**
	     * 報告済みのシール報告管理明細の数を取得
	     *
	     * @param rpt Report 報告モデル
	     * @return int 報告済みの件数のカウント
	     * @throws FrameworkException
	     */
	    public int countDuplicationReportForUpdate(Report rpt){
		   
		    int ret = 0;
		    try {
    	    TRN_Report_Seal_Persister per = new TRN_Report_Seal_Persister();
			    for (int i = 0; i < 5; i++) {
				    TrnReportd rd = rpt.getReportD()[i];
				    if (rd == null)
					    continue;
				    int seal_str_no = 0;
				    int seal_end_no = 0;
				    try {
					    seal_str_no = int.Parse(rd.SealStrNo);
				    } catch (Exception e) {
				    }
				    try {
					    seal_end_no = int.Parse(rd.SealEndNo);
				    } catch (Exception e) {
					    seal_end_no = -1;
				    }
				    ret += per.countDuplicationReportForUpdate(seal_str_no, seal_end_no, rpt.getReportH().ReportNo);
			    }
		    } catch (Exception pe) {
                LogManager.error( "TRN_ReportManager countDuplicationReport "+pe.Message+pe.StackTrace );
			  
		    } 
		    return ret;
	    }
        
        
        /**
	     *<pre>
	     *チェックルーチンから報告モデルを取得し、論理削除を行う
	     *ともに、確認シール番号をキーにシール購入管理明細を参照し、報告件数-1をセットし、更新。
	     *インサートするテーブル名
	     *	TRN_Report_H
	     *	TRN_Report_D
	     *	TRN_Report_Seal
	     *</pre>
	     * @param String report_no
	     */
	    public void deleteReport(string report_no,LoginModel login)  {
		    ArrayList rd_list = null;
		    TrnReporth model = new TrnReporth();
		    TRN_Report_Seal_Persister per_S = new TRN_Report_Seal_Persister();
            TRN_Report_H_Persister par = new TRN_Report_H_Persister();
            TRN_Report_D_Persister par2 = new TRN_Report_D_Persister();
            SqlDB db = new SqlDB();
            try
            {
                db.TransBegin();
                rd_list = par2.get(report_no);

                //報告No.セット
                model.ReportNo = report_no;
                //ステータスをセット
                model.ReportSts = TrnReporth.STATUS_DELETE;
                //Timestampをセット
                DateTime currentDate = System.DateTime.Now;
                model.UpdDate = currentDate;
                //更新者
                model.UpdUnionCode = login.Unioncode;
                model.UpdBranchCode = (short)login.Branchcode;
                model.UpdFuncId = "deleteReport()";
                par.delete(db, model);
                if (rd_list != null)
                {
                    for (int i = 0; i < rd_list.Count; i++)
                    {
                        per_S.deleteByProcedure(db, (TrnReportd)rd_list[i]);

                    }
                }
                db.TransCommit();
            }
            catch (Exception pe)
            {
                LogManager.error("TRN_ReportManager deleteReport " + pe.Message + pe.StackTrace);
                db.TransRollback();
            }
            finally
            {
                db.Close();
            }
	    }
    
        /**
         * 渡されたモデルのチェックをする<br>
         * アップデート用
         *
         * @param model TRN_Report_H
         * @param ctx Context
         * @return TRN_Report_H
         * @throws FrameworkException 
         */
        public List<string> checkUpdateReportH(TrnReporth model, System.Resources.ResourceManager rm, LoginModel login)
        {
            InputErrorException ie = new InputErrorException(rm);
            //報告日
            ParameterCheckUtility.checkReportDate(ie, model.ReportYear, model.ReportMonth, model.ReportDay);
            //組合員コードチェック
            ParameterCheckUtility.checkUnionCode(ie, model.UnionCode);
            //支店存在チェック
            ParameterCheckUtility.existUnion(ie, model.UnionCode);
            //支店コードチェック
            ParameterCheckUtility.checkBranchCode(ie, model.BranchCode);
            //支店存在チェック
            ParameterCheckUtility.existBranch(ie, model.UnionCode, model.BranchCode);
            //報告担当者　入力必須、全角のみ
            if (TrnReporth.CLSS_FAX.Equals(model.ReportClss))
            {
                //FAX
                if (!StringUtil.isEmpty(model.ReportTantoName))
                {
                    ParameterCheckUtility.checkReportTantoName(ie, model.ReportTantoName);
                }
            }
            else
            {
                //Internet
                if (login.Userclss.Equals("10"))
                {
                    ParameterCheckUtility.checkReportTantoName(ie, model.ReportTantoName);
                }
            }
            //設置業者区分　必須 ( 委託販売会社名　当社設置の場合入力不可になる )
            ParameterCheckUtility.checkEstCompClss(ie, model.EstCompClss, model.ConsCompName, model.ConsCompTelno);
            
            //設置場所・ホール名　入力必須、長さチェック
            ParameterCheckUtility.checkHallName(ie, model.HallName);
            ParameterCheckUtility.checkHallCity2(ie, model.HallCity);
            //設置場所・ホール電話番号　必須入力、半角数字のみ、長さチェック
            ParameterCheckUtility.checkTelNo(ie, model.HallTel);
            //設置遊技機型式名　入力必須
            ParameterCheckUtility.checkMachineName(ie, model.MachineName);
            //設置台数　入力必須、半角のみ、マイナス入力はエラー、
            ParameterCheckUtility.checkMachineQty(ie, model.MachineQty);
            //設置日　必須、半角のみ、日付形式
            ParameterCheckUtility.checkEstDate(ie, model.EstYear, model.EstMonth, model.EstDay);
            //販売業者登録証番号　必須、半角のみ 設置業者Mに存在しなければエラー
            ParameterCheckUtility.checkTraderRegNo(ie, model.TraderRegNo1, model.TraderRegNo2);
            //設置業者存在チェック
            ParameterCheckUtility.existTrader(ie, model.TraderRegNo, model.TraderRegNo1, model.TraderRegNo2);
            //取扱主任者登録証番号　必須、半角のみ
            ParameterCheckUtility.checkChiefNo(ie, model.ChiefNo1, model.ChiefNo2);
            //取扱主任者名　必須、スペースなし
            ParameterCheckUtility.checkChiefName(ie, model.ChiefName);
            //作業従事者名　スペースなし
            ParameterCheckUtility.checkWorkerName(ie, model.Worker1Name);
            ParameterCheckUtility.checkWorkerName(ie, model.Worker2Name);
            ParameterCheckUtility.checkWorkerName(ie, model.Worker3Name);
            ParameterCheckUtility.checkWorkerName(ie, model.Worker4Name);
            ParameterCheckUtility.checkWorkerName(ie, model.Worker5Name);
            ParameterCheckUtility.checkWorkerName(ie, model.Worker6Name);
            return ie.getErrorMessages();

        }


        /**
	     * 渡されたTRN_Report_D[]のチェックをする<br>
	     * アップデート用
	     *
	     * @param	report_d TRN_Report_D[]
	     * @return	TRN_Report_D[]
	     * @throws FrameworkException
	     */
	    public List<string> checkUpdateReportD(TrnReportd[] report_d,System.Resources.ResourceManager rm)
        {
		    TrnReportd[] model = new TrnReportd[5];
		    TrnReportd tmpmodel = null;
		    InputErrorException ie = new InputErrorException(rm);
		    try {
    		    TRN_Purch_SealPersister per = new TRN_Purch_SealPersister();
			    int j = 0;
			    for (int i = 1; i <= 5; i++) {
				    tmpmodel = report_d[i - 1];
				    if (tmpmodel == null)
					    continue;
				    if (StringUtil.isEmpty(tmpmodel.SealStrNo) && StringUtil.isEmpty(tmpmodel.SealEndNo)) {
					    model[i - 1] = null;
				    } else {
					    j += 1;
					    int seal_str_no = 0;
					    int seal_end_no = 0;
					    try {
						    seal_str_no = int.Parse(tmpmodel.SealStrNo);
					    } catch (Exception e) {
					    }
					    try {
						    seal_end_no = int.Parse(tmpmodel.SealEndNo);
					    } catch (Exception e) {
						    seal_end_no = -1;
					    }
					    //シール購入管理明細を参照しシール番号が存在しなければエラー
					    if (!per.existSealNo(seal_str_no, seal_end_no)) {
						    ie.addErrorCode(ErrorCodeDefine.SEAL_NO_IS_NOT_REG);
					    }
					    model[i - 1] = checkReportD(ie,tmpmodel);
				    }
			    }
			    //確認シール番号、 一行のみ入力必須
			    if (j == 0) {
				    ie.addErrorCode(ErrorCodeDefine.SEAL_NO_IS_NULL);
				   
			    }
		    } catch (Exception pe) {
			    LogManager.error("TRN_ReportManager chechUpdateReportD "+pe.Message);
                
		    } 
		    
		    return ie.getErrorMessages();
	    }

        /**
         *<pre>
         * チェックルーチンから報告モデルを取得し、修正を行う
         * インサートするテーブル名
         *  TRN_Report_H
         *  TRN_Report_D
         *  TRN_Report_Seal
         *</pre>
         * @param ctx Context
         * @throws FrameworkException
         */
        public void updateReport( Report rpt,LoginModel login)
        {
            TrnReporth report_H = rpt.getReportH();
            TrnReportd[] model = rpt.getReportD();
            TrnReportd report_D = null;

            //重複エラーフラグ
            if (TrnReporth.ERROR_ON.Equals(report_H.DupErrorFlg)) {
                LogManager.info("TRN_ReportManager 重複エラーチェック====true");
                report_H.DupErrorFlg = TrnReporth.ERROR_ON;
            } else {
                LogManager.info("TRN_ReportManager 重複エラーチェック====false");
                report_H.DupErrorFlg = TrnReporth.ERROR_OFF;
            }
            //報告者不一致エラーフラグ
            if (TrnReporth.ERROR_ON.Equals(report_H.DifReportFlg)) {
                LogManager.info("TRN_ReportManager 報告者不一致エラーチェック====true");
                report_H.DifReportFlg = TrnReporth.ERROR_ON;
                
            } else {
                LogManager.info("TRN_ReportManager 報告者不一致エラーチェック====false");
                report_H.DifReportFlg=TrnReporth.ERROR_OFF;
            }

            SqlDB db = new SqlDB();
            try {
                db.TransBegin();
                LogManager.info("TRN_ReportManager DB更新処理開始====DB_update_start");
                TRN_Report_H_Persister per_H = new TRN_Report_H_Persister();
                TRN_Report_D_Persister per_D = new TRN_Report_D_Persister();
                TRN_Report_Seal_Persister per_S = new TRN_Report_Seal_Persister();
                /** 報告見出( TRN_Report_H )をアップデートする */
                DateTime currentDate = System.DateTime.Now;
                report_H.UpdDate = currentDate;
                report_H.FaxErrorFlg = TrnReporth.ERROR_OFF;
                //更新者
                report_H.UpdUnionCode = login.Unioncode;
                report_H.UpdBranchCode = (short)login.Branchcode;
                //更新Function
                report_H.UpdFuncId = "updateReport()";
                //報告見出しのアップデート
                per_H.update(db, report_H);
                /** 報告管理明細( TRN_Report_D )をアップデートする */
                LogManager.info( " TRN_ReportManager DB更新処理====roop_start " );
                for (int i = 0; i < 5; i++) {
                    report_D = model[i];
                    //現在のレコードを取得
                    TrnReportd dtmp = per_D.get( report_H.ReportNo, i + 1);
                    if (model[i] == null || model[i].Id == null) {
                        LogManager.info(" TRN_ReportManager roop in ====model[i] == null ");
                        //delete
                        if (dtmp != null) {
                            //削除
                            per_S.deleteByProcedure(db, dtmp);
                            per_D.delete(db, report_H.ReportNo, i + 1);
                        }
                        continue;
                    }
                   
                    report_D.UpdDate = currentDate;
                    LogManager.info("TRN_ReportManager DB更新処理====updata_date get!");
                    if (dtmp != null) {
                        //削除
                        LogManager.info("TRN_ReportManager DB更新処理====trn_report_seal delete start!");
                        per_S.deleteByProcedure( db ,report_D);
                        LogManager.info("TRN_ReportManager DB更新処理====trn_report_seal delete start!");
                        LogManager.info("TRN_ReportManager DB更新処理====trn_report_d update start!");
                        per_D.update(db ,report_D);
                        LogManager.info("TRN_ReportManager DB更新処理====trn_report_d update end!");
                    } else {
                        LogManager.info("----------------------------------" + report_D.Id);
                        per_D.insert(db, report_D);
                    }
                    LogManager.info("TRN_ReportManager DB更新処理====insertByprocedure!");
                    per_S.insertByProcedure(db, report_D);
                }
                db.TransCommit();
                
            } catch (Exception pe) {
                LogManager.error("trn_reportmanager updateReport "+pe.Message+pe.StackTrace);
                db.TransRollback();
            }
            finally
            {
                db.Close();
            }
        }


        /**
        * [代理報告]
        * 代理報告の入力値チェック　その１.
        * 区分・受信日・組合員コード・支店コード
        */
        public List<string> checkInsertReportRepresen1(string juchu_clss, string rcv_date_y, string rcv_date_m, string rcv_date_d, string union_code, string branch_code, System.Resources.ResourceManager rm)
        {
            /*
             * 区分
             * 　10 or 20
             * 
             * 受信日-年
             * 　必須
             * 受信日-月
             * 　必須
             * 受信日-日
             * 　必須
             * 受信日
             * 　日付妥当性
             * 
             * 組合員コード
             * 　必須
             * 　マスタ存在
             * 
             * 支店コード
             * 　必須
             * 　マスタ存在
             */

            InputErrorException ie = new InputErrorException(rm);
            /*
		    String juchu_clss = context.getParameter(InputParameters.SEAL_ORDER_REPRESEN_JUCHU_CLSS);
		    String rcv_date_y = context.getParameter(InputParameters.FAX_RCV_DATE_Y);
		    String rcv_date_m = context.getParameter(InputParameters.FAX_RCV_DATE_M);
		    String rcv_date_d = context.getParameter(InputParameters.FAX_RCV_DATE_D);
		    String union_code = context.getParameter(InputParameters.MST_UNION_CODE);
		    String branch_code = context.getParameter(InputParameters.MST_BRANCH_CODE);
            */
            //#######################################################
            // 区分　必須チェック
            if (juchu_clss == null || "".Equals(juchu_clss))
            {
                // 4400=区分を入力してください。
                ie.addErrorCode("E4400");
            }
            // 区分　値の妥当性チェック：FAX と インターネット 以外の場合はエラー
            else if (!juchu_clss.Equals(TrnJuchuh.JUCHU_CLSS_FAX) && !juchu_clss.Equals(TrnJuchuh.JUCHU_CLSS_INTERNET))
            {
                // 4401=有効な区分を入力してください。
                ie.addErrorCode("E4401");
            }

            //#######################################################
            // 受信日チェック
            bool dateYSafe = true;
            bool dateMSafe = true;
            bool dateDSafe = true;
            // 受信日-年　必須チェック
            if (rcv_date_y == null || "".Equals(rcv_date_y))
            {
                dateYSafe = false;
            }
            // 受信日-月　必須チェック
            if (rcv_date_m == null || "".Equals(rcv_date_m))
            {
                dateMSafe = false;
            }
            // 受信日-日　必須チェック
            if (rcv_date_d == null || "".Equals(rcv_date_d))
            {
                dateDSafe = false;
            }
            // 年月日のすべてが null or 空欄のとき
            if (!dateYSafe && !dateMSafe && !dateDSafe)
            {
                // 4410=受信日を入力してください。
                ie.addErrorCode("E4410");
            }
            // 年月日のいずれか一つ以上に入力があるとき
            else
            {
                try
                {
                    // 数値 parse できない場合は NumberFormatException
                    if (!StringUtil.isValidDate(rcv_date_y, rcv_date_m, rcv_date_d))
                    {
                        // 4411=有効な受信日を入力してください。
                        ie.addErrorCode("E4411");
                    }
                }
                catch (Exception e)
                {
                    // 4411=有効な受信日を入力してください。
                    ie.addErrorCode("E4411");
                }
            }

            try
            {
                // 組合員コード・支店コードの一括チェック（必須＋マスタ存在）
                ParameterCheckUtility.existUnionBranch(ie, union_code, branch_code);

            }
            catch (Exception pe)
            {
                LogManager.error("TRN_ReportManager checkInsertReportRepresen1 " + pe.Message + pe.StackTrace);

            }

            return ie.getErrorMessages();
        }
            

        /**
	     * 貼付報告（代理報告）の第２画面の入力値チェック
	     *
	     * @return Reportデータモデル
	     * @throws FrameworkException
	     */
	    public List<string> checkInsertReportRepresen2(Report rpt, System.Resources.ResourceManager rm,LoginModel login) 
        {
		    LogManager.info( "TRN_ReportManager checkInsertReportRepresen2() - in  ");
            InputErrorException ie = new InputErrorException(rm);
            TrnReporth report_h = rpt.getReportH();
            TrnReportd[] report_d = rpt.getReportD(); 

            //TRN_Report_Hのチェックを行う
            checkInsertReportH_Represen(ie,report_h ,rm);
            
            //TRN_Report_D[]のチェックを行う
            checkInsertReportD(ie,report_d,rm,login);
            
            LogManager.info( "TRN_ReportManager checkInsertReportRepresen2() - sealCount:"+ rpt.getSealCount());
		    LogManager.info( "TRN_ReportManager checkInsertReportRepresen2() - machine_qty:"+ rpt.getReportH().MachineQty);
		    
            //TRN_Report_HとTRN_Report_D[]をともにチェック
		    if (rpt.getSealCount() != rpt.getReportH().MachineQty) {
			    ie.addErrorCode(ErrorCodeDefine.SEAL_NO_IS_NOT_MATCH_MACHINE_QTY);
		    }
		    //確認シール番号の重複チェック
		    String[] seal_str_no = rpt.getSeal_str_no();
		    String[] seal_end_no = rpt.getSeal_end_no();
		    ParameterCheckUtility.checkSealNoDuplication(ie, seal_str_no, seal_end_no);

		    return ie.getErrorMessages();
	    }


        /**	     * 未承認の報告見出の数を取得	     * @param union_code	組合員コード	     * @return 未承認の報告見出の数	     */	    public int getUnadmissionReport(String union_code)  {		    SqlDB db = null;		    int ret = 0;		    try {                db = new SqlDB();			    TRN_Report_H_Persister par = new TRN_Report_H_Persister();			    ret = par.getUnadmissionReport(db, union_code);		    } catch (Exception e1) {                LogManager.error(" getUnadmissionReport "+e1.Message+e1.StackTrace);            } finally {			    try {                    db.Close();			    } catch (Exception e2) {
                    LogManager.error(" getUnadmissionReport finally" + e2.Message + e2.StackTrace);			    }		    }		    return ret;	    }
    }
}
